# 重写 jwt_response_payload_handler 可以实现  返回 token 和其他数据

# user  就是我们认证之后的user

def jwt_response_payload_handler(token, user=None, request=None):
    return {
        'token':token,
        'username':user.username,
        'user_id':user.id
    }





# 1. 根据用户在用户名的地方输入的内容进行判断，如果用户输入的是手机号，我们就根据手机号查询用户
#         否则就根据 用户名进行查询
#     2. 如果用户查询出来，我们再校验密码

from django.contrib.auth.backends import ModelBackend
import re
from users.models import Users
"""
    根据用户输入的信息 判断是手机号还是用户名
    :param username:
    :return:
    """


def get_user_by_account(username):
    try:

        if re.match('1[3-9]\d{9}',username):
            user=Users.objects.get(mobile=username)

        else:
            user=Users.objects.get(username=username)
    except Users.DoesNotExist:
        user=None

    return user


#手机号　均可用户名登陆
# class UsernameMobileAuthModelBackend(ModelBackend):
#     #重写登陆时密码校验方法
#     def authenticate(self, request, username=None, password=None, **kwargs):
#         # 1. 根据用户在用户名的地方输入的内容进行判断，如果用户输入的是手机号，我们就根据手机号查询用户
#         # 否则就根据 用户名进行查询
#         user=get_user_by_account(username)
#         # 2如果用户查询出来，我们再校验密码
#         if user is not None and user.check_password(password):
#             return user
#
#         return None




#手机号用户名　均可登陆(另外一种方式)
class SettingsBackend(object):
    def authenticate(self, request, username=None, password=None, **kwargs):
        user = get_user_by_account(username)

        if user is not None and user.check_password(password):
            return user
        return None

    def get_user(self, user_id):
        try:
            return Users.objects.get(pk=user_id)
        except Users.DoesNotExist:
            return None


